package com.neighbor.neighborhoodadmin.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neighbor.neighborhoodadmin.pojo.Admins;
import com.neighbor.neighborhoodadmin.pojo.Users;
import com.neighbor.neighborhoodadmin.service.IUsersService;
import com.neighbor.neighborhoodadmin.utils.ResponseMsg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户基本信息表 前端控制器
 * </p>
 *
 * @author song
 * @since 2025-09-22 09:11:23
 */
@RestController
@RequestMapping("/users")
public class UsersController {
    @Autowired
    IUsersService usersService;
    @RequestMapping("usersList")   // 得到所有用户列表
    ResponseMsg usersList(){
        return ResponseMsg.getInstance(ResponseMsg.SUCCESS, "查询成功", usersService.list());
    }

    @GetMapping()   // 用户分页查询
    ResponseMsg pageUsers(@RequestParam(defaultValue = "1")Integer page, @RequestParam(defaultValue = "5")Integer limit){
        IPage<Users> usersInfo = new Page<>(page, limit);
        QueryWrapper<Users> wrapper = new QueryWrapper<>();
        return ResponseMsg.getInstance(ResponseMsg.SUCCESS, "分页成功", usersService.page(usersInfo, wrapper));
    }

    @PutMapping("{userId}/status")   // 修改用户账号状态
    ResponseMsg updateStatus(@PathVariable Integer userId) {
        System.out.println("用户id: " + userId);
        QueryWrapper<Users> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id", userId);
        Users users = usersService.getOne(wrapper);

        // 1. 先判断用户是否存在
        if (users == null) {
            System.out.println("用户不存在");
            return ResponseMsg.getInstance(ResponseMsg.PARAMETER_ERROR, "用户不存在");
        }

        // 2. 切换用户状态（1→0，0→1）
        Integer newStatus = users.getStatus() == 1 ? 0 : 1;
        users.setStatus(newStatus);
        System.out.println("用户新数据: " + users);

        // 3. 构建更新条件（指定要更新的status字段和用户ID）
        UpdateWrapper<Users> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("status", newStatus) // 状态已确定非空，可简化null判断
                .eq("user_id", userId);   // 直接用路径参数的userId，更简洁

        // 4. 调用正确的update方法，并添加return返回成功响应
        if (usersService.update(updateWrapper)) {
            // 修复：添加return，返回成功结果
            return ResponseMsg.getInstance(ResponseMsg.SUCCESS, "修改成功", users);
        }

        // 5. 更新失败时返回错误
        return ResponseMsg.getInstance(ResponseMsg.PARAMETER_ERROR, "修改失败");
        // 注：建议将"PARAMETER_ERROR"改为"SYSTEM_ERROR"，因为参数没问题，是更新操作失败
    }
    @RequestMapping("findUsers")    // 搜索框查找用户
    public ResponseMsg findUsers(@RequestBody Map<String, String> params) {
        System.out.println("查询数据: " + params);
        // 获取前端参数
        String info = params.getOrDefault("info", "").trim(); // 搜索关键词
        String status = params.getOrDefault("status", "all"); // 状态筛选
        Integer gender = Integer.valueOf(params.getOrDefault("gender", "0"));  // 性别筛选
        // 页码和每页条数（如果需要后端分页可使用）
        Integer page = Integer.parseInt(params.getOrDefault("page", "1"));
        Integer limit = Integer.parseInt(params.getOrDefault("limit", "5"));

        QueryWrapper<Users> wrapper = new QueryWrapper<>();

        // 只有当搜索关键词不为空时，才添加昵称模糊查询
        if (!info.isEmpty()) {
            wrapper.like("nickname", info)
                    .or().like("phone", info) // 支持手机号搜索
                    .or().like("user_id", info) // 支持用户ID搜索
                    .or().like("building", info) // 支持楼栋号搜索
                    .or().like("unit", info) // 支持单元号搜索
                    .or().like("room", info); // 支持房间号搜索
        }

        // 只有当状态不是"all"时，才添加状态筛选
        if (!"all".equals(status)) {
            wrapper.eq("status", status);
        }
        if (gender != 0) {
            wrapper.eq("gender", gender);
        }
        // 查询数据（如果需要后端分页，这里可以用page方法）
        List<Users> usersList = usersService.list(wrapper);

        return ResponseMsg.getInstance(ResponseMsg.SUCCESS, "搜索成功", usersList);
    }
}
